// pages/cart/cart.js
const CartBehavior = require('../../behavior/cart');
import {createStoreBindings} from 'mobx-miniprogram-bindings'
import {
    store
} from '../../store/store.js'
import {request as axios} from '../../util/request/request'
Page({
    behaviors:[CartBehavior],
    /**
     * 页面的初始数据
     */
    data: {
// 倒计时的秒数
seconds: 3,
// 定时器的 Id
timer: null
    },
    //全选按钮
    checkoutHandler(e){
        this.changeAllGoodsState(e.detail)
        // 加载
        this.storeBindings = createStoreBindings(this, {
            store,
            fields: ['cart','total','checkedTotalPrice','checkedTotal'],
            actions: []
          })
    },
    //结算按钮
    onClickButton(){
       let addS =  wx.getStorageSync('address')
       if(addS === '') return wx.showToast({
         title: '请先选择地址',
         icon:'none'
       }) 
       if(this.data.checkedTotal<=0) return wx.showToast({
        title: '请选择要购买的商品',
        icon:'none'
      }) 
      if(!this.data.token||this.data.token===''){ wx.showToast({
        title: '请先登录',
        icon:'none'
      }) 
      this.delayNavigate()
      return
    }
    this.payOrder()
    },
    radioCchangeHandler(e){
        this.changeGoodsState(e.detail)
    },
    gotoDetail(e){
        wx.navigateTo({
            url: '/subpkg/goods_detail/goods_detail?goods_id=' + e.detail.goods_id
        })
    },
    numChange(e){
        this.changeGoodsCount(e.detail)
    },
    deleteGoods(e){

        this.removeGoodsById(e.currentTarget.dataset.item.goods_id)
    },
    // 延迟导航到 my 页面
    delayNavigate() {
        // 1. 展示提示消息，此时 seconds 的值等于 3
        this.showTips(this.data.seconds)

        // 2. 创建定时器，每隔 1 秒执行一次
        this.data.timer = setInterval(() => {
          // 2.1 先让秒数自减 1
          this.data.seconds--
          // 2. 判断秒数是否 <= 0
          if (this.data.seconds <= 0) {
            // 2.1 清除定时器
            clearInterval(this.data.timer)
            this.data.seconds = 3
            // 2.2 跳转到 my 页面
            // 跳转到 my 页面
            wx.switchTab({
              url: '/pages/my/my',
              // 页面跳转成功之后的回调函数
              success: () => {
                // 调用 vuex 的 updateRedirectInfo 方法，把跳转信息存储到 Store 中
                this.updateRedirectInfo({
                  // 跳转的方式
                  openType: 'switchTab',
                  // 从哪个页面跳转过去的
                  from: '/pages/cart/cart'
                })
              }
            })

            // 2.3 终止后续代码的运行（当秒数为 0 时，不再展示 toast 提示消息）
            return
          }
          // 2.2 再根据最新的秒数，进行消息提示
          this.showTips(this.data.seconds)
        }, 1000)
      },
      // 展示倒计时的提示消息
      showTips(n) {
        // 调用 uni.showToast() 方法，展示提示消息
        wx.showToast({
          // 不展示任何图标
          icon: 'none',
          // 提示的消息
          title: '请登录后再结算！' + n + ' 秒后自动跳转到登录页',
          // 为页面添加透明遮罩，防止点击穿透
          mask: true,
          // 1.5 秒后自动消失
          duration: 1500
        })
      },
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
       
         // 加载
         this.storeBindings = createStoreBindings(this, {
            store,
            fields: ['cart','total','checkedTotalPrice','checkedTotal'],
            actions: []
          })
        this.setBadge()
    },
  // 微信支付
  async payOrder() {
    // 1. 创建订单
    // 1.1 组织订单的信息对象
    const orderInfo = {
      // 开发期间，注释掉真实的订单价格，
      // order_price: this.checkedGoodsAmount,
      // 写死订单总价为 1 分钱
      order_price: 0.01,
      consignee_addr: this.data.address.addStr,
      goods: this.data.cart.filter(x => x.goods_state).map(x => ({
        goods_id: x.goods_id,
        goods_number: x.goods_count,
        goods_price: x.goods_price
      }))
    }
    // 1.2 发起请求创建订单
    const { data: res } = await axios('POST','/my/orders/create', orderInfo)
    if (res.meta.status !== 200) return wx.showToast({
      title: '创建订单失败',
      icon:'error'
    })
    // 1.3 得到服务器响应的“订单编号”
    const orderNumber = res.message.order_number


    // 2. 订单预支付
    // 2.1 发起请求获取订单的支付信息
    const { data: res2 } = await axios('POST',
      '/my/orders/req_unifiedorder', { order_number: orderNumber })
    // 2.2 预付订单生成失败
    if (res2.meta.status !== 200) return wx.showToast({
        title: '预付订单生成失败',
        icon:'error'
      })
    // 2.3 得到订单支付相关的必要参数
    const payInfo = res2.message.pay

    // 3. 发起微信支付
    // 3.1 调用 uni.requestPayment() 发起微信支付
    const [err, succ] = await wx.requestPayment(payInfo)
    // 3.2 未完成支付
    if (err) return wx.showToast({
        title: '订单未支付',
        icon: "error"
      })
    // 3.3 完成了支付，进一步查询支付的结果
    const { data: res3 } = await axios('POST',
      '/my/orders/chkOrder', { order_number: orderNumber })
    // 3.4 检测到订单未支付
    if (res3.meta.status !== 200) return wx.showToast({
        title: '订单未支付',
        icon: "error"
      })
    // 3.5 检测到订单支付完成
    wx.showToast({
      title: '支付完成！',
      icon: 'success'
    })
  },
    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {
        wx.vibrateShort({
            type:'medium'
        })
    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {
        this.storeBindings.destroyStoreBindings()
    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    }
})